![Security Hubのセキュリティ基準から、特定の重要度以上の違反をフィルターしてCSV形式で出力する方法を教えてください](https://devio2023-media.developers.io/wp-content/uploads/2019/05/aws-security-hub.png)
Security Hubのセキュリティ基準から、特定の重要度以上の違反をフィルターしてCSV形式で出力する方法を教えてください
困っていた内容
Security Hub のコンソールで、該当のセキュリティ基準のトップページから重要度や違反をフィルターし、その結果を CSV としてダウンロードできます。しかし、違反している具体的なリソース名は表示されず、違反しているリソース数などしか表示されません。
違反しているリソースも表示されている内容の CSV を取得したいのですが、取得する方法はあるのでしょうか。
個別のコントロールでダウンロードするとリソースを確認できますが、各コントロールごとに移動してダウンロードする方法ではなく、一括で CSV 形式で取得したいです。
どう対応すればいいの?
GetFindings API でフィルターを利用すれば、特定のセキュリティ基準・重要度の違反を出力できます。
例えば、以下のコマンドではセキュリティ基準AWS基礎セキュリティのベストプラクティスv1.0.0
の重要度が HITH または CRITICAL であり、アーカイブされていない違反が出力されます。
aws securityhub get-findings --filters '{"GeneratorId":[{"Value": "aws-foundational-security-best-practices","Comparison":"PREFIX"}],"ComplianceStatus":[{"Value": "FAILED","Comparison":"EQUALS"}],"SeverityLabel":[{"Value": "CRITICAL","Comparison":"EQUALS"},{"Value":"HIGH","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' { "Findings": [ { "SchemaVersion": "2018-10-08", "Id": "arn:aws:securityhub:ap-northeast-1:111111111111:subscription/aws-foundational-security-best-practices/v/1.0.0/IAM.6/finding/1140eea0-8e06-4de0-a519-b765ac8cded8", "ProductArn": "arn:aws:securityhub:ap-northeast-1::product/aws/securityhub", "ProductName": "Security Hub", "CompanyName": "AWS", "Region": "ap-northeast-1", "GeneratorId": "aws-foundational-security-best-practices/v/1.0.0/IAM.6", ...
ただし、AWS CLI や AWS SDK のどちらを使うにしても、直接 CSV 形式では取得できないため、CSV に変換する必要があります。
AWS CLI を利用する場合、例えば以下のコマンドで CSV 形式で出力されます。
aws securityhub get-findings --filters '{"GeneratorId":[{"Value": "aws-foundational-security-best-practices","Comparison":"PREFIX"}],"ComplianceStatus":[{"Value": "FAILED","Comparison":"EQUALS"}],"SeverityLabel":[{"Value": "CRITICAL","Comparison":"EQUALS"},{"Value":"HIGH","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' --query "Findings[]" | jq -r '.[] | [.ProductFields.ControlId, .AwsAccountId, .Resources[0].Id, .Severity.Label, .Compliance.Status, .Workflow.Status, .UpdatedAt] | @csv' "IAM.6","111111111111","AWS::::Account:111111111111","CRITICAL","FAILED","NEW","2022-02-27T08:21:46.840Z" "GuardDuty.1","111111111111","AWS::::Account:111111111111","HIGH","FAILED","NEW","2022-02-27T08:21:44.984Z" "S3.8","111111111111","arn:aws:s3:::aws-sam-cli-xxx","HIGH","FAILED","NEW","2022-02-27T06:49:29.229Z" ...